#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void print(int ret[], int num) {
	int i = 0;
	printf("%d ", ret[0]);

	for (i = 1; i < num; i++) {
		if (ret[i + 1] == ret[i]&& ret[i] == ret[i - 1]) {
			i++;
		}
		else if (ret[i + 1] == ret[i]) {
			printf("%d ", ret[i]);
		}
		else if (ret[i] == ret[i - 1]) {
			;
		}
		else {
			printf("%d ", ret[i]);
		}
	}

}
void bubble(int gather[], int num) {
	int i = 0;
	for (i = 0; i < num - 1; i++) {
		int j = 0;
		for (j = 0; j < num - 1 - i; j++) {
			if (gather[j] > gather[j + 1]) {
				int tem = gather[j];
				gather[j] = gather[j+1];
				gather[j + 1] = tem;
			}
		}
	}
	print(gather, num);

}
void judgment(int a[], int b[], int c[], int d,int e) {
	int gather[1000] = { 0 };
	int i = 0;
	int count = 0;
	for (i = 0; i < 2; i++) {
		gather[i] = a[i];
		count++;
	}
	for (i = 2; i < d + 2; i++) {
		gather[i] = b[i - 2];
	}
	for (i = 2 + d; i < 2 + d + e; i++) {
		gather[i] = c[i - 2 - d];
	}
	bubble(gather, d + e + 2);

}
int main() {
	int ret[2] = { 0 };
	int a[1000] = { 0 };
	int b[1000] = { 0 };
	int i = 0;
	for (i = 0; i < 2; i++) {
		scanf("%d", ret + i);
	}
	for (i = 0; i < ret[0]; i++) {
		scanf("%d", a + i);
	}
	for (i = 0; i < ret[1]; i++) {
		scanf("%d", b + i);
	}
	judgment(ret, a, b,ret[0],ret[1]);

	return 0;
}